package mediator;

/**
 * 中介者模式
 * 考虑A,B,C,D,E,F需要两两相互通信，我们如果划线的话，就会看出特别的混乱，
 * 中介者模式就是引入一个H对象，A,B,C,D,E,F要进行通信的话，都需要先跟H进行通信，H再转交给具体的对象，
 * 这样就实现了对象之间的解耦，A-F就只需要跟H对象耦合。
 * 实现：因为A-F都需要跟H通信，所以A-F都需要持有H对象，而H对象又得根据需要转交给A-F的任何对象，
 * 因此H需要持有A-F的对象，他们之间是一个相互引用的关系。
 * 在中介者模式中，A-F称为同事类（Colleague），而H称为中介者类（Mediator)
 */
public class Client {

    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();
        Colleague colleagueA = new ConcreteColleagueA(mediator);
        Colleague colleagueB = new ConcreteColleagueB(mediator);
        mediator.setColleagueA(colleagueA);
        mediator.setColleagueB(colleagueB);

        //A要跟B通信
        colleagueA.doAction();  //ConcreteColleagueB do it....
        colleagueB.doAction();  //ConcreteColleagueA do it....
    }
}
